package br.com.gerenteweb.managedBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.gerenteweb.beans.GrupoDeMercadoria;
import br.com.gerenteweb.daos.GrupoDeMercadoriaDao;
import br.com.gerenteweb.interfaces.ManageBeansInterface;

@ManagedBean(name = "grupoDeMercadoriaBean")
@SessionScoped
public class GrupoDeMercadoriaBean implements ManageBeansInterface,
		Serializable {

	private static final long serialVersionUID = 1L;
	private GrupoDeMercadoriaDao grupoDao = new GrupoDeMercadoriaDao();
	private GrupoDeMercadoria grupo = new GrupoDeMercadoria();
	private List<GrupoDeMercadoria> grupos = new ArrayList<GrupoDeMercadoria>();

	@Override
	public String adicionar() {
		try {
			grupoDao.addGrupo(grupo);
			limpar();
			return "lista-de-grupos";
		} catch (Exception e) {
			e.printStackTrace();
			return "lista-de-grupos";
		}

	}

	@Override
	public String remover() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String idGrupo = params.get("idGrupo");
		try {
			grupo = grupoDao.getPorID(Long.parseLong(idGrupo));
			grupoDao.removeGrupo(this.grupo);
			limpar();
			return "lista-de-grupos";
		} catch (Exception e) {
			e.printStackTrace();
			return "lista-de-grupos";
		}
	}

	@Override
	public String carregar() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String idGrupo = params.get("idGrupo");
		try {
			this.grupo = grupoDao.getPorID(Integer.parseInt(idGrupo));
			return "carregar-grupo";
		} catch (Exception e) {
			e.printStackTrace();
			return "lista-de-grupos";
		}
	}

	@Override
	public void atualizar() {
		try {
			grupoDao.updateGrupo(grupo);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void listar() {
		this.grupos = grupoDao.getGrupos();

	}

	@Override
	public void limpar() {
		this.grupo = new GrupoDeMercadoria();
		this.grupoDao = new GrupoDeMercadoriaDao();
		this.grupos = new ArrayList<GrupoDeMercadoria>();

	}

	public GrupoDeMercadoriaDao getGrupoDao() {
		return grupoDao;
	}

	public void setGrupoDao(GrupoDeMercadoriaDao grupoDao) {
		this.grupoDao = grupoDao;
	}

	public GrupoDeMercadoria getGrupo() {
		return grupo;
	}

	public void setGrupo(GrupoDeMercadoria grupo) {
		this.grupo = grupo;
	}

	public List<GrupoDeMercadoria> getGrupos() {
		listar();
		return grupos;
	}

	public void setGrupos(List<GrupoDeMercadoria> grupos) {
		this.grupos = grupos;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((grupo == null) ? 0 : grupo.hashCode());
		result = prime * result
				+ ((grupoDao == null) ? 0 : grupoDao.hashCode());
		result = prime * result + ((grupos == null) ? 0 : grupos.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		GrupoDeMercadoriaBean other = (GrupoDeMercadoriaBean) obj;
		if (grupo == null) {
			if (other.grupo != null)
				return false;
		} else if (!grupo.equals(other.grupo))
			return false;
		if (grupoDao == null) {
			if (other.grupoDao != null)
				return false;
		} else if (!grupoDao.equals(other.grupoDao))
			return false;
		if (grupos == null) {
			if (other.grupos != null)
				return false;
		} else if (!grupos.equals(other.grupos))
			return false;
		return true;
	}

}
